package com.haixiaoke.saas.house.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.haixiaoke.saas.apartment.domain.HousingAllocation;
import com.haixiaoke.saas.apartment.domain.OrderVO;
import com.haixiaoke.saas.common.annotation.Excel;
import com.haixiaoke.saas.common.core.domain.BaseEntity;
import com.haixiaoke.saas.user.domain.BizUserBusiness;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 房屋信息对象 biz_house
 *
 * @author panda
 * @date 2023-10-18
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class House extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 房屋id
     */
    private String houseId;

    /**
     * 房间号
     */
    @Excel(name = "房间号")
    @NotNull(message = "请输入房间号")
    private String roomNumber;

    /**
     * 楼盘id
     */
    @Excel(name = "楼盘id")
    @NotNull(message = "请选择楼盘")
    private String estateId;

    /**
     * 楼盘名称
     */
    @Excel(name = "楼盘名称")
    private String estateName;

    /**
     * 楼栋id
     */
    @Excel(name = "楼栋id")
    @NotNull(message = "请选择楼栋")
    private String buildingId;

    /**
     * 楼栋名称
     */
    @Excel(name = "楼栋名称")
    private String buildingName;

    /**
     * 组织id
     */
    /*@Excel(name = "组织id")
    private String tenantId;*/

    /**
     * 房屋类型：1.分为公租房；2.廉租房；3.房改房；4.商品房；5.集资房；6.经济适用房；7.小产权房；8.安置房
     */
    @Excel(name = "房屋类型",readConverterExp = "1=公租房,2=廉租房,3=房改房,4=商品房,5=集资房,6=经济适用房,7=小产权房,8=安置房",
            combo = {"公租房","廉租房","房改房","商品房","集资房","经济适用房","小产权房","安置房"})
    private String houseNature;

    /**
     * 房型类型：1.普通公寓；2.出租屋；3.学生公寓；4.民宿
     */
    @Excel(name = "房型类型",readConverterExp = "1=普通公寓,2=出租屋,3=学生公寓,4=民宿",
            combo = {"普通公寓","出租屋","学生公寓","民宿"})
    private String houseType;

    /** 房间状态：1.出租中；2.即将到期；3.逾期；4.欠费；5.退租中；6.空置；7.空置；8.维修；9.占用 */
    /**
     * 房间状态：1、已出租；2、空置
     */
    @Excel(name = "房间状态",readConverterExp = "1=已出租,2=空置", combo = {"已出租","空置"})
    private String houseState;

    /**
     * 房屋租赁状态：1、预定；2、即将到期；3、逾期；4、欠款；5、退租中
     */
    @Excel(name = "房屋租赁状态",readConverterExp = "1=预定,2=即将到期,3=逾期,4=欠款,5=退租中",
            combo = {"预定","即将到期","逾期","欠款","退租中"})
    private String houseLeaseState;

    /**
     * 房屋维护状态：1、占用；2、清洁；3、维修
     */
    @Excel(name = "房屋维护状态",readConverterExp = "1=占用,2=清洁,3=维修",
            combo = {"占用","清洁","维修"})
    private String houseMaintainState;

    /**
     * 是否线上出租（0：否；1：是）
     */
    @Excel(name = "是否线上出租", readConverterExp = "0=否,1=是",combo = {"是","否"})
        private String onlineRentalType;

    /**
     * 是否合租（0：否；1：是）
     */
    @Excel(name = "是否合租", readConverterExp = "0=否,1=是",combo = {"是","否"})
    private String shareFlatType;

    /**
     * 房屋面积
     */
    @Excel(name = "房屋面积")
    @NotNull(message = "请输入面积")
    private BigDecimal houseArea;

    /**
     * 室
     */
    @Excel(name = "室")
    @NotNull(message = "请输入几室")
    private String roomType;


    /**
     * 厅
     */
    @Excel(name = "厅")
    @NotNull(message = "请输入几厅")
    private String hall;


    /**
     * 卫
     */
    @Excel(name = "卫")
    @NotNull(message = "请输入几卫")
    private String toilet;

    /**
     * 朝向
     */
    @Excel(name = "朝向")
    @NotNull(message = "请选择朝向")
    private String houseOrientation;

    /**
     * 产权类型
     */
    @Excel(name = "产权类型")
    private Integer housePropertyType;

    /**
     * 产权所有人
     */
    @Excel(name = "产权所有人")
    private String housePropertyOwner;

    /**
     * 是否为智能设备（0：否；1：是）
     */
    @Excel(name = "是否为智能设备", readConverterExp = "0=否,1=是",combo = {"是","否"})
    private String smartFurnitureType;

    /**
     * 水表号
     */
    @Excel(name = "水表号")
    private String waterMeterNumber;

    /**
     * 电表号
     */
    @Excel(name = "电表号")
    private String electricMeterNumber;

    /**
     * 燃气表
     */
    @Excel(name = "燃气表")
    private String gasMeterNumber;

    /**
     * 房屋管理员id
     */
    @Excel(name = "房管家id")
    // @NotNull(message = "请选择房管家")
    private Long houseManagerId;

    /**
     * 房管家名字
     */
    @Excel(name = "房管家名字")
    private String houseManagerName;

    /**
     * 房管家电话
     */
    @Excel(name = "房管家电话")
    private String houseManagerPhone;

    /**
     * 物业id
     */
    @Excel(name = "物业id")
    private Long propertyId;

    /**
     * 物业名称
     */
    @Excel(name = "物业名称")
    private String propertyName;

    /**
     * 房屋二维码
     */
    @Excel(name = "房屋二维码")
    private String houseQrCode;

    /**
     * 省份id
     */
    @Excel(name = "省份id")
    private String provinceId;

    /**
     * 省份名称
     */
    @Excel(name = "省份名称")
    private String provinceName;

    /**
     * 市id
     */
    @Excel(name = "市id")
    private String cityId;

    /**
     * 市名称
     */
    @Excel(name = "市名称")
    private String cityName;

    /**
     * 区id
     */
    @Excel(name = "区id")
    private String districtId;

    /**
     * 区名称
     */
    @Excel(name = "区名称")
    private String districtName;

    /**
     * 所属街道
     */
    @Excel(name = "所属街道")
    private String streetId;

    /**
     * 街道名称
     */
    @Excel(name = "街道名称")
    private String streetName;

    /**
     * 所属社区
     */
    @Excel(name = "所属社区")
    private String communityId;

    /**
     * 社区名称
     */
    @Excel(name = "社区名称")
    private String communityName;

    /**
     * 房间名称
     */
    @Excel(name = "房间名称")
    private String premisesAddress;

    /**
     * 详细地址（省市区）
     */
    @Excel(name = "详细地址")
    private String fullAddress;

    /**
     * 逻辑删除标志(0代表存在 2代表删除）
     */
    private String delFlag;

    /**
     * 单元id
     */
    @NotNull(message = "请选择单元")
    private String unitId;

    /**
     * 单元名称
     */
    @Excel(name = "单元名称")
    private String unitName;

    /**
     * 层数
     */
    @Excel(name = "层数")
    @NotNull(message = "请选择层数")
    private Integer floors;

    /**
     * 可住人数
     */
    @Excel(name = "可住人数")
    // @NotNull(message = "请输入可住人数")
    private Integer checkInNumber;

    /**
     * 合作方式:1.房屋委托;2.代理服务
     */
    @Excel(name = "合作方式:1.房屋委托;2.代理服务")
    private String cooperationType;

    /**
     * 收费方式:1.账单服务费;2.一次性服务费
     */
    @Excel(name = "收费方式:1.账单服务费;2.一次性服务费")
    private String chargeType;

    /**
     * 账单服务费
     */
    @Excel(name = "账单服务费")
    private BigDecimal serviceCharge;

    /**
     * 费用金额
     */
    @Excel(name = "费用金额")
    private BigDecimal feeAmount;

    /**
     * 最晚付款日期
     */
    @Excel(name = "最晚付款日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date latestPaymentDate;

    /**
     * 房屋租赁许可证号
     */
    @Excel(name = "房屋租赁许可证号")
    private String rentalLicenseNumber;

    /**
     * 房源核验码
     */
    @Excel(name = "房源核验码")
    private String houseCheckCode;

    /**
     * 业主id
     */
    @Excel(name = "业主id")
    @NotNull(message = "请选择业主")
    private Long proprietorUserId;


    /**
     * 业主姓名
     */
    @Excel(name = "业主姓名")
    private String proprietorName;
    private String proprietorMobile;

    private List<SubHouse> subHouseList;

    /**
     * 自定义字段，房间总数
     */
    private Integer totalHouseNumber;

    /**
     * 自定义字段，已出租房间总数
     */
    private Integer rentalHouseNumber;

    /**
     * 自定义字段，空置房间总数
     */
    private Integer vacancyHouseNumber;

    /**
     * 自定义字段，空置房间的比率
     */
    private String vacancyHousePercentage;

    /**
     * 自定义字段，线下房间总数
     */
    private Integer onlineDownHouseNumber;

    /**
     * 自定义字段，线下出租房间总数
     */
    private Integer onlineDownRentalHouseNumber;

    /**
     * 自定义字段，线上房间总数
     */
    private Integer onlineUpHouseNumber;

    /**
     * 自定义字段，线上出租房间总数
     */
    private Integer onlineUpRentalHouseNumber;

    /**
     * 自定以字段，开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date startCreateTime;


    /**
     * 自定以字段，结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endTime;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endCreateTime;

    /**
     * 用户信息表
     */
    private BizUserBusiness bizUserBusiness;

    /**
     * 房屋配置
     */
    private HousingAllocation housingAllocation;

    /**
     * 房屋设施id
     */
    private List<HouseFacilitiesItem> facilitiesItemList;


    /**
     * 所属小区信息对象
     */
    private Estate estate;
    private String estateJson;
    /**
     * 所属楼栋信息对象
     */
    private Building building;
    private String buildingJson;


    /**
     * 所属单元信息对象
     */
    private Unit unit;
    private String unitJson;

    /**
     * 楼盘分布类型：1.集中式；2.分散式
     */
    private String estateType;

    /**
     * 房屋id集合
     */
    private String[] houseIds;

    private List<OrderVO> orderVOList;
    private OrderVO orderVO;

    private String roleKey;

    /**
     * 订单状态
     */
    private String orderState;

    /**
     * 订单类型：1长短租 2日租
     */
    private String orderType;


    /**
     * 上架状态：0已上架 1已下架
     */
    private String apartmentState;

    /**
     * 打扫状态：1.待指派；2.已指派；3.已完成
     */
    private String sweepState;

    /**
     * 当前日期
     */
    private Date nowTime;

    /**
     * 空置天数
     */
    private Integer vacancyDay;

    /**
     * 是否满房：0.否；1.是
     */
    private String noVacancy;
}
